package cn.lx;


/**
 * @author lixin
 * @Classname Handler
 * @Description 抽象处理者
 * @Date 2019/10/7 上午11:23
 */
public abstract class Handler {
    private Handler nextHandler;

    public final Response handleMessage(Request request) {
        Response response = null;
        // 判断是否是自己处理的级别
        if (this.getHandlerlevel().equals(request.getRequestLevel())) {
            response = this.echo(request);
        } else {
            // 判断是否有下一个处理者
            if (this.nextHandler != null) {
                response = this.nextHandler.handleMessage(request);
            } else {
                // 其他处理
            }
        }
        return response;
    }


    // 设置下一个处理者
    public void setNextHandler(Handler _nextHandler) {
        this.nextHandler = _nextHandler;
    }

    // 每个处理者都有一个处理级别
    protected abstract Level getHandlerlevel();

    // 每个处理者都有必须实现的处理任务
    protected abstract Response echo(Request request);

}
